package net.bracode.view;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.text.Font;
import javafx.stage.Stage;

import javax.swing.JOptionPane;

import net.bracode.dao.Database;
import net.bracode.entity.Participante;

public class ParticipanteInsert extends Application {

	public static Integer inserirId = 1; 
	
	private AnchorPane pane;
	private Scene scene;
	private Stage stage;
	
	private Label labelNome;
	private Label labelCPF;
	private Label labelFone;
	private Label labelPerfil;
	
	private TextField nome;
	private TextField cpf;
	private TextField fone;
	private TextField perfil;
	
	private Button cadastrar;
	private Button cancelar;
	
	private Participante participante;
	private Application menu;
	
	private int id;
	
	public ParticipanteInsert(Participante participante, Application menu) {
		this.menu = menu;
		if(participante == null){
			id = ParticipanteInsert.inserirId++;
			this.participante = new Participante();
		} else {
			this.participante = participante;
			id = participante.getId();
		}
	}
	
	@Override
	public void start(Stage stage) throws Exception {
		this.stage = stage;
		pane = new AnchorPane();
		scene = new Scene(pane, 600, 400);
		this.stage = stage;
		iniciarComponentes();
		
		pane.getChildren().addAll(labelCPF, labelFone, labelNome, labelPerfil,
				nome, cpf, fone, perfil, cadastrar, cancelar);
		
		cadastrar.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent arg0) {
				if(ehValido()){
					participante.setId(id);
					participante.setNome(nome.getText());
					participante.setCpf(cpf.getText());
					participante.setFone(fone.getText());
					participante.setPerfil(perfil.getText());
					
					Database.getDatabase().save(participante);
					JOptionPane.showMessageDialog(null, "Participante Cadastrado com sucesso", "Aviso", 
                             JOptionPane.INFORMATION_MESSAGE);
					
					voltar();
				} else {
					JOptionPane.showMessageDialog(null, "Todos os campos devem ser preenchidos", "Aviso", 
                            JOptionPane.ERROR_MESSAGE);
				}
			}
		});
		
		cancelar.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent arg0) {
				participante = null;
				voltar();
			}
		
		});
		
		scene.getStylesheets().add("login.css");
		stage.setScene(scene);
		stage.setTitle("Cadastro de Participantes");
		stage.show();
		iniciarLayouts();
	}
	
	private void iniciarComponentes(){
		labelNome   = new Label("Nome  : ");
		labelCPF    = new Label("CPF   : ");
		labelFone   = new Label("Fone  : ");
		labelPerfil = new Label("Perfil: ");
		
		labelNome.setFont(new Font(16));
		labelCPF.setFont(new Font(16));
		labelFone.setFont(new Font(16));
		labelPerfil.setFont(new Font(16));
		
		nome   = new TextField();
		cpf    = new TextField();
		fone   = new TextField();
		perfil = new TextField();
		
		nome.setPromptText("Digite aqui seu nome");
		cpf.setPromptText("Digite aqui seu cpf");
		fone.setPromptText("Digite aqui seu fone");
		perfil.setPromptText("Digite aqui seu perfil");
		
		cadastrar = new Button("Cadastrar");
		cancelar  = new Button("Cancelar");
		
		if(participante != null){
			nome.setText(participante.getNome());
			cpf.setText(participante.getCpf());
			fone.setText(participante.getFone());
			perfil.setText(participante.getPerfil());
		}
	}
	
	private void iniciarLayouts(){
		labelNome.setLayoutX((pane.getWidth() - nome.getWidth() - labelNome.getWidth()) / 2);
		labelNome.setLayoutY(62);
		
		labelCPF.setLayoutX(labelNome.getLayoutX());
		labelCPF.setLayoutY(labelNome.getLayoutY() + 60);
		
		labelFone.setLayoutX(labelNome.getLayoutX());
		labelFone.setLayoutY(labelNome.getLayoutY() + 120);
		
		labelPerfil.setLayoutX(labelNome.getLayoutX());
		labelPerfil.setLayoutY(labelNome.getLayoutY() + 180);
		
		nome.setLayoutX(labelNome.getLayoutX() + labelNome.getWidth() + 3);
		nome.setLayoutY(60);
		
		cpf.setLayoutX(nome.getLayoutX());
		cpf.setLayoutY(nome.getLayoutY() + 60);
		
		fone.setLayoutX(nome.getLayoutX());
		fone.setLayoutY(nome.getLayoutY() + 120);
		
		perfil.setLayoutX(nome.getLayoutX());
		perfil.setLayoutY(nome.getLayoutY() + 180);
		
		cancelar.setLayoutX((pane.getWidth() - cadastrar.getWidth() - cancelar.getWidth()) / 2);
		cancelar.setLayoutY(300);
		
		cadastrar.setLayoutX(cancelar.getLayoutX() + cancelar.getWidth() + 3);
		cadastrar.setLayoutY(300);
	}
	
	private boolean ehValido(){ 
		if(nome.getText().trim()   == "" || nome.getText() == null ||
		   cpf.getText().trim()    == "" || cpf.getText()  == null ||
		   fone.getText().trim()   == "" || fone.getText() == null ||
		   perfil.getText().trim() == "" || perfil.getText() == null){
			return false;
		}
		return true;
	}
	
	private void voltar(){
		try {
			this.menu.start(getStage());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public Stage getStage() {
		return stage;
	}
}
